#include "mainwindow_impl.h"

Mainwindow::Mainwindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow) {
    ui->setupUi(this);
    ui->textEditTranslate->setReadOnly(true);

    connect(ui->pushButtonFind, SIGNAL(clicked()), this, SLOT(slot_find()));
    connect(ui->comboBoxType, SIGNAL( currentIndexChanged(int)), this, SLOT(slot_setType(int)));
    connect(ui->checkBoxAutoSearch, SIGNAL( stateChanged ( int)), this, SLOT(slot_setAutoSearch(int)));
    connect(ui->Save_as,SIGNAL(activated()),this,SLOT(slot_save()));

mb = new QMessageBox(this);
mb->setWindowTitle("О программе Электронный словарь терминов РЭБ");
mb->setText("Программа \"Электронный словарь терминов РЭБ\" разработана:\n ОАО «ВНИИ «Градиент» \n Ростов-на-Дону, пр. Соколова, 96 \n Рецензент: Ю.И. Маевский \n Составители: М.С. Тясто, С.Н. Туливетров, А.С. Николаев \n Разработчик: Антоненко В.В.");
connect(ui->About_prog, SIGNAL(activated()), mb, SLOT(show()));

mb_help = new QMessageBox(this);
mb_help->setWindowTitle("Помощь по работе с программой");
mb_help->setText(" Поиск происходит в соответствии с выбранным направлением в выпадающем списке.\n Поле \"Автоматический поиск\" разрешает поиск в словарях по мере набора слов. \n Поле \"Раскрывать сокращения\" расскрывает ссылки на определения связанные с основным(только английские).\n\n ВНИМАНИЕ! В словаре могут быть слова набранные с несоответствующей раскладкой, т.е. например русская буква А вместо английской А, если по первому запросу поиск ничего не дал, попробуйте поменять раскладку и буквы в слове для поиска.");
connect(ui->Help, SIGNAL(activated()), mb_help, SLOT(show()));

    ui->comboBoxType->insertItem(1,"Рус->Англ");
    ui->comboBoxType->insertItem(2,"Англ->Рус");
    ui->comboBoxType->insertItem(3,"Рус сокр");
    ui->comboBoxType->insertItem(4,"Англ сокр");
    ui->comboBoxType-> setCurrentIndex(3);

}

void Mainwindow::slot_save () {
 QString   Filename =
 QFileDialog::getSaveFileName( this,
 QString("Сохранить файл"));
 if (!Filename.isEmpty()) // если имя файла задано
{
  // Создаем файл
  QFile MyFile(Filename);
 MyFile.open(QIODevice::WriteOnly);
  QTextStream output(&MyFile);
output<<ui->textEditTranslate->toPlainText();
MyFile.close();
}
 ui->statusbar-> showMessage("Сохранено в файл "+Filename);
}

void Mainwindow::slot_findWord ( QListWidgetItem * item) {
    ui->textEditTranslate->clear();
    QStringList tmp_str_list=db.getResult(table_name,"word",column_name+" LIKE '"+item->text()+"'");
    for(int i=0;i<tmp_str_list.size();i++)
    ui->textEditTranslate->append(item->text()+" -> "+tmp_str_list[i]);
}

void Mainwindow::slot_findTransl ( QListWidgetItem * item) {

    if(!ui->checkBoxSaveFind->isChecked())
    ui->textEditTranslate->clear();
    else
    ui->textEditTranslate->append("\n");

QString where_clause=column_name+" LIKE '"+item->text()+"'";
    QStringList tmp_str_list=db.getResultTransl(table_name,where_clause);

        QStringList tmp_word_list;
        QString values="";
  QStringList::iterator it_tmp_str_list;
it_tmp_str_list=tmp_str_list.begin();

while(it_tmp_str_list!=tmp_str_list.end()){
   tmp_word_list.clear();
   tmp_word_list=(*it_tmp_str_list).split("#");
   QStringList::iterator it_values;
   it_values=tmp_word_list.begin();
  int state=(*it_values).toInt();
   ++it_values;
         while(it_values!=tmp_word_list.end()){
       if(state&SqliteDB::ABBR){
        values+="Аббревиатура: ";
        values+=(*it_values);
        values+="\n";
        state-=SqliteDB::ABBR;
        ++it_values;
        continue;
    }
       if(state&SqliteDB::WORD){
        values+=(*it_values);
        values+=" -> ";
        ++it_values;
        state-=SqliteDB::WORD;
        continue;
    }
       if(state&SqliteDB::TRANSL){
        values+=(*it_values);
        ++it_values;
        state-=SqliteDB::TRANSL;
        continue;
    }
        if(state&SqliteDB::EXCEP){
        values+="\nПояснение: ";
        values+=(*it_values);
        values+="\n";
        ++it_values;
        state-=SqliteDB::EXCEP;
        continue;
    }
        if(state&SqliteDB::FREQ){
        values+="\nсм. ";
        values+=(*it_values);
        values+="\n";
        ++it_values;
        state-=SqliteDB::FREQ;
        continue;
    }
        //++it_values;
        }
         qDebug()<<values;
    ui->textEditTranslate->append(values);
    ui->textEditTranslate->append("\n");
    state=0;
    values="";
    ++it_tmp_str_list;
}
}

void Mainwindow::slot_find() {
    ui->listWidgetWord->clear();
    //ui->listWidgetWord->insertItems(0,db.getResult(table_name,column_name,column_name+" LIKE '% "+ui->lineEditWord->text()+" %' OR "+column_name+" LIKE '"+ui->lineEditWord->text()+" %' OR "+column_name+" LIKE '% "+ui->lineEditWord->text()+"' OR "+column_name+" LIKE '"+ui->lineEditWord->text()+"%'"));
    ui->listWidgetWord->insertItems(0,db.getResult(table_name,column_name,column_name+" LIKE '%"+ui->lineEditWord->text()+"%'"));
}

void Mainwindow::slot_setAutoSearch(int state) {
    if (state==Qt::Checked) {
        connect(ui->lineEditWord, SIGNAL( textChanged ( const QString )), this, SLOT(slot_find()));
        ui->pushButtonFind->setEnabled(false);
    } else if(state==Qt::Unchecked){
        disconnect(ui->lineEditWord, SIGNAL( textChanged ( const QString )), this, SLOT(slot_find()));
        ui->pushButtonFind->setEnabled(true);
    }
}

void Mainwindow::slot_setType(int index) {
//    qDebug()<<"ololo! "<<index;
     disconnect(ui->listWidgetWord,SIGNAL(itemDoubleClicked ( QListWidgetItem *)),this,SLOT(slot_findWord ( QListWidgetItem * )));
     disconnect(ui->listWidgetWord,SIGNAL(itemDoubleClicked ( QListWidgetItem *)),this,SLOT(slot_findTransl ( QListWidgetItem * )));
    switch (index) {
    case 0:
        column_name="Transl";
        table_name="translate";
       connect(ui->listWidgetWord,SIGNAL(itemDoubleClicked ( QListWidgetItem *)),SLOT(slot_findTransl ( QListWidgetItem * )));
        break;
    case 1:
        column_name="Words";
        table_name="translate";
        connect(ui->listWidgetWord,SIGNAL(itemDoubleClicked ( QListWidgetItem *)),SLOT(slot_findTransl ( QListWidgetItem * )));
        break;
    case 2:
        column_name="abbrev";
        table_name="russianabb";
         connect(ui->listWidgetWord,SIGNAL(itemDoubleClicked ( QListWidgetItem *)),this,SLOT(slot_findWord ( QListWidgetItem * )));
        break;
    case 3:
        column_name="Abbr";
        table_name="translate";
        connect(ui->listWidgetWord,SIGNAL(itemDoubleClicked ( QListWidgetItem *)),SLOT(slot_findTransl ( QListWidgetItem * )));
        break;
    }
}
